﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using System.Data;

/// <summary>
/// Summary description for ModeloCrearNuevoUsuario
/// </summary>
public class ModeloCrearNuevoUsuario
{

    private String nombreUsuario;
    private String apPaternoUsuario;
    private String apMaternoUsuario;
    private String telContactoUsuario;
    private String mailUsuario;
    String idRol;
    private Conexion conn;

    private String nGenerado;
    private String pGenerado;

	public ModeloCrearNuevoUsuario(String nom , String aP, String aM, String t, String ma , String iRol)
	{
        nombreUsuario = nom;
        apPaternoUsuario = aP;
        apMaternoUsuario = aM;
        telContactoUsuario = t;
        mailUsuario = ma;
        idRol = iRol;
        conn = new Conexion();
	}

    public ModeloCrearNuevoUsuario()
    {
        conn = new Conexion();
    }

    public String validarModelo()
    {
        String errores = "";
        ValidacionRegex val = new ValidacionRegex();
        if (!val.validarString(nombreUsuario, 27))
        {
            errores = errores + "Nombre: Ingresar solo letras. No se permiten m&aacute;s de 30 caracteres" + "<br />";
        }
        if (!val.validarString(apPaternoUsuario, 30))
        {
            errores = errores + "Apellido paterno: Ingresar solo letras. No se permiten m&aacute;s de 30 caracteres" + "<br />";
        }
        if (!val.validarString(apMaternoUsuario, 30))
        {
            errores = errores + "Apellido materno: Ingresar solo letras. No se permiten m&aacute;s de 30 caracteres" + "<br />";
        }
        if (!val.validarMail(mailUsuario))
        {
            errores = errores + "Mail de contacto: Formato incorrecto" + "<br />";
        } 
        if (!val.validarTelContacto(telContactoUsuario))
        {
            errores = errores + "Celular de contaco: Ingresar como m&aacute;ximo 10 d&iacute;gitos sin guiones" + "<br />";
        }

        return errores;
        
    }

    public String getNGenerado()
    {
        return nGenerado;
    }

    public String getPGenerado()
    {
        return pGenerado;
    }

    public DataTable getRoles()
    {
        try
        {

            DataTable dt = new DataTable();

            DataColumn c1 = new DataColumn();
            c1.ColumnName = "Nombre";
            DataColumn c2 = new DataColumn();
            c2.ColumnName = "id";

            dt.Columns.Add(c1);
            dt.Columns.Add(c2);


            String query = "SELECT ROL.NOMBREROL , ROL.IDROL " +
                           "FROM ROL";

            bool connected = conn.iniciarConexion();

            if (connected == true)
            {

                
                SqlDataReader rows = null;
                SqlCommand comm = new SqlCommand(query, conn.getConn());
                rows = comm.ExecuteReader();
                while (rows.Read())
                {
                    DataRow r = dt.NewRow();
                    r["Nombre"] = rows[0].ToString();
                    r["id"] = rows[1].ToString();
                    dt.Rows.Add(r);

                }

                
                conn.terminarConexion();

                return dt;
            }

            else
            {

                conn.terminarConexion();
                return null;
            }
        }

        catch (Exception exc)
        {

            return null;
        }

    }


    public int insertNuevoUsuario()
    {
        try
        {
            bool connected = conn.iniciarConexion();

            if (connected == true)
            {

                SqlCommand cmd = new SqlCommand("crearUsuario", conn.getConn());
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.Add(new SqlParameter("@nombreRealUsuario",
                                                           SqlDbType.VarChar,
                                                           40,
                                                           "nombreRealUsuario"
                                                        )
                                        );


                cmd.Parameters.Add(new SqlParameter("@apellidoPaterno",
                                                          SqlDbType.VarChar,
                                                          40,
                                                          "apellidoPaterno"
                                                       )
                                       );

                cmd.Parameters.Add(new SqlParameter("@apellidoMaterno",
                                                          SqlDbType.VarChar,
                                                          40,
                                                          "apellidoMaterno"
                                                       )
                                       );

                cmd.Parameters.Add(new SqlParameter("@telefono",
                                                          SqlDbType.VarChar,
                                                          40,
                                                          "telefono"
                                                       )
                                       );

                cmd.Parameters.Add(new SqlParameter("@mailContacto",
                                                          SqlDbType.VarChar,
                                                          40,
                                                          "mailContacto"
                                                       )
                                       );

                cmd.Parameters.Add(new SqlParameter("@idRol",
                                                          SqlDbType.Int,
                                                          0,
                                                          "mailContacto"
                                                       )
                                       );


                cmd.Parameters.Add(new SqlParameter("@outParam",
                                                           SqlDbType.Int,
                                                           0,
                                                           ParameterDirection.Output,
                                                           false,
                                                           0,
                                                           0,
                                                           "outParam",
                                                           DataRowVersion.Default,
                                                           null
                                                        )
                                        );


                cmd.Parameters.Add(new SqlParameter("@outNomUs",
                                                           SqlDbType.VarChar,
                                                           30,
                                                           ParameterDirection.Output,
                                                           false,
                                                           0,
                                                           0,
                                                           "outNomUs",
                                                           DataRowVersion.Default,
                                                           null
                                                        )
                                        );

                cmd.Parameters.Add(new SqlParameter("@outPassUs",
                                                           SqlDbType.VarChar,
                                                           30,
                                                           ParameterDirection.Output,
                                                           false,
                                                           0,
                                                           0,
                                                           "outPassUs",
                                                           DataRowVersion.Default,
                                                           null
                                                        )
                                        );

                cmd.Parameters[0].Value = nombreUsuario;
                cmd.Parameters[1].Value = apPaternoUsuario;
                cmd.Parameters[2].Value = apMaternoUsuario;
                cmd.Parameters[3].Value = telContactoUsuario;
                cmd.Parameters[4].Value = mailUsuario;
                cmd.Parameters[5].Value = idRol;
                cmd.UpdatedRowSource = UpdateRowSource.OutputParameters;

                int per = cmd.ExecuteNonQuery();

                int result = (int)cmd.Parameters["@outParam"].Value;
                String nUs = (String)cmd.Parameters["@outNomUs"].Value;
                String pUs = (String)cmd.Parameters["@outPassUs"].Value;

                nGenerado = nUs;
                pGenerado = pUs;

                conn.terminarConexion();

                if (result == 1)
                {
                    return 1;
                }

                else
                {
                    return -1;
                }

            }

            else
            {
                conn.terminarConexion();
                return -2;
            }
        }

        catch (Exception exc)
        {
            return -3;
        }
    }

}